function halftone_gui
    % Interfaccia grafica per l'elaborato di immagini

    clc

    % Ricava matrice risoluzione schermo
    screen_resolution = get(0, 'screensize');
    screen_width = screen_resolution(3);
    screen_height = screen_resolution(4);

    % Imposta unita' di misura per la finestra
    w_width_unit = screen_width / 4;
    w_height_unit = screen_height / 4;

    % Finestra principale
    main_window = figure('Visible', 'on',...
        'Name', 'Elaborato Immagini - Half Toning',...
        'NumberTitle', 'off',...
        'Resize', 'off',...
        'MenuBar', 'none',...
        'Position',[w_width_unit,w_height_unit,w_width_unit*2,w_height_unit*2]);

    % Pannello selezione immagine
    image_panel = uipanel('Parent', main_window,...
        'Title', 'Selezione immagine',...
        'TitlePosition', 'centertop',...
        'Position', [.0 .0 .5 1]);
    
    % Pulsante selezione immagine
    image_filename_button = uicontrol('Parent', image_panel,...
        'Callback', @loadImage_callback,...
        'Style', 'pushbutton',...
        'String', 'Sfoglia...',...
        'Units', 'normalized',...
        'Position', [.2 .0 .6 .1]);
    
    % Asse per visualizzare l'immagine selezionata
    image_axe = axes('Parent', image_panel,...
        'XTick', [],...
        'YTick', [],...
        'Position', [.0 .1 1 .8]);
        
    % Nome del file immagine selezionato
    image_filename = 0;
    
    % 'div'
    div = 2;
    
    % Pannello vizualizzazione risultato
    halftone_panel = uipanel('Parent', main_window,...
        'Title', 'Immagine Half-Tone',...
        'TitlePosition', 'centertop',...
        'Position', [.5 .0 .5 1]);
    
    % Slider correzione 'div'
    halftone_div_slider = uicontrol('Parent', halftone_panel,...
        'Callback', @halftone_callback,...
        'Style', 'slider',...
        'Min', 2,...
        'Max', 100,...
        'Value', 2,...
        'Units', 'normalized',...
        'Position', [.2 .0 .6 .05]);
    
    % Stringa per visualizzare il valore 'div'
    halftone_div_text = uicontrol('Parent', halftone_panel,...
        'Style', 'text',...
        'String', num2str(div),...
        'Units', 'normalize',...
        'Position', [.8 .0 .1 .05]);
    
    % Asse per visualizzare il risultato
    halftone_axe = axes('Parent', halftone_panel,...
        'XTick', [],...
        'YTick', [],...
        'Position', [.0 .1 1 .8]);
    
    % Caricamento immagine
    function loadImage_callback(source, eventdata)
        image_filename = uigetfile('*.jpg', 'Selezionare l immagine desiderata');
        
        % Visualizzatore immagine selezionata
        imshow(imread(image_filename), 'Parent', image_axe);
    end
    
    % Funzione di half toning per l'immagine selezionata
    function halftone_callback(source, eventdata)
        div = round(get(source, 'Value'));
        set(halftone_div_text, 'String', num2str(div));
        halftone(image_filename, div);
    end
end